package com.dqyt.common.check;

import com.dqyt.common.constant.AuthorityID;
import com.dqyt.khjc.bean.BaseBean;
import com.dqyt.khjc.bean.Role;
import com.dqyt.khjc.bean.User;
import org.apache.commons.lang3.ArrayUtils;

import java.util.List;

/**
 * 各种信息的检验工具
 */
public class CheckTool {

    /**
     * 检验用户本身是否本限制登录
     */
    public static CheckInfo checkUserStatueBan(User user) {
        CheckInfo ret = new CheckInfo();
        // 如果数据已经被删除
        if (user.getSysStatus() == BaseBean.SYS_STATUS_ERROR) {
            ret.setRet(true); // 被限制登录
            ret.setMsg("你的账户已经被删除了，请你联系管理员");
        } else if (user.getStatue() == User.STATUE_BAN) {
            ret.setRet(true); // 被限制登录
            ret.setMsg("你的账户被限制登录，请你联系管理员");
        } else {
            ret.setRet(false); // 没有被限制登录
        }
        return ret;
    }

    /**
     * 检查角色是否被限制登录
     */
    public static CheckInfo checkRoleBan(Role role) {

        CheckInfo ret = new CheckInfo();
        if (role.getSysStatus() == BaseBean.SYS_STATUS_ERROR) {
            ret.setRet(true); // 被限制登录
            ret.setMsg("你所属的角色已经被删除了，请你联系管理员");
        } else if (role.getLoginStatue() == Role.LOGINSTATUE_BAN) {
            ret.setRet(true); // 被限制登录
            ret.setMsg("你所属的角色已经被限制登录了，请你联系管理员");
        } else {
            ret.setRet(false); // 没有被限制登录
        }
        return ret;
    }

/*    *//**
     * 同时检查用户状态和角色状态
     *
     * @param user 要求一定要带角色信息
     * @return
     *//*
    public static CheckInfo checkUserAndRoleBan(User user) {
        CheckInfo ret = new CheckInfo();
        // 检查用户信息
        ret = checkUserStatueBan(user);
        if (ret.isRet()) {
            return ret;
        }
        // 检查角色信息
        ret = checkRoleBan(user.getAuthority());
        if (ret.isRet()) {
            return ret;
        }
        return ret;
    }*/

    /**
     * 检查用户是否具有对应的权限
     *
     * @param user
     * @param authorityID
     * @return
     */
    public static boolean checkAuthority(User user, AuthorityID authorityID) {
        List<Role>  roles = user.getAuthority();

        for(Role role: roles){
            // 判断主页权限
            if (authorityID == AuthorityID.HOME && role.getHome() == Role.AUTHORITY_OK) {
                return true;
            }

            // 客户管理
            if (authorityID == AuthorityID.KHGL && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl() == Role.AUTHORITY_OK) {
                return true;
            }

            // 客户管理 -待审核申请
            if (authorityID == AuthorityID.KHGL_DSHSQ && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_dshsq() == Role.AUTHORITY_OK) {
                return true;
            }
            //客户管理 --  新增客户信息
            if (authorityID == AuthorityID.KHGL_XZKHXX && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_xzkhxx() == Role.AUTHORITY_OK) {
                return true;
            }
            //客户管理 --  新增客户人员信息
            if (authorityID == AuthorityID.KHGL_XZKHRYXX && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_xzkhryxx() == Role.AUTHORITY_OK) {
                return true;
            }
            //客户管理 --  游客管理
            if (authorityID == AuthorityID.KHGL_YKGL && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_xzkhryxx() == Role.AUTHORITY_OK) {
                return true;
            }
            //客户管理 --  客户信息一览
            if (authorityID == AuthorityID.KHGL_KHXXYL && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_khxxyl() == Role.AUTHORITY_OK) {
                return true;
            }

            //客户管理 --  客户信息一览
            if (authorityID == AuthorityID.KHGL_KHRYXXYL && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_khryxxyl() == Role.AUTHORITY_OK) {
                return true;
            }

            //客户管理 --  客户数据分析
            //if (authorityID == AuthorityID.KHGL_KHSJFX && role.getKhgl() == Role.AUTHORITY_OK && role.getKhgl_khsjfx() == Role.AUTHORITY_OK) {
            //    return true;
            //}

            //系统管理
            if (authorityID == AuthorityID.XTSZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz() == Role.AUTHORITY_OK) {
                return true;
            }

            //系统管理 --  登陆追踪
            if (authorityID == AuthorityID.XTSZ_DLZZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz_dlzz() == Role.AUTHORITY_OK) {
                return true;
            }

            //系统管理 --  操作追踪
            if (authorityID == AuthorityID.XTSZ_CZZZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz_czzz() == Role.AUTHORITY_OK) {
                return true;
            }


            //系统管理 --  短信设置
            if (authorityID == AuthorityID.XTSZ_DXSZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz_dxsz() == Role.AUTHORITY_OK) {
                return true;
            }


            //系统管理 --  客户注册设置
            if (authorityID == AuthorityID.XTSZ_KHZCSZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz_khzcsz() == Role.AUTHORITY_OK) {
                return true;
            }


            //系统管理 --  任务分配设置
            if (authorityID == AuthorityID.XTSZ_RWFPSZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz_rwfpsz() == Role.AUTHORITY_OK) {
                return true;
            }

            //系统管理 --  其他设置
            if (authorityID == AuthorityID.XTSZ_QTSZ && role.getXtsz() == Role.AUTHORITY_OK && role.getXtsz_qtsz() == Role.AUTHORITY_OK) {
                return true;
            }





            //个人信息管理 --  个人信息设置
            if (authorityID == AuthorityID.GRXXGL_GRXXSZ && role.getGrxxgl() == Role.AUTHORITY_OK && role.getGrxxgl_grxxsz() == Role.AUTHORITY_OK) {
                return true;
            }

            //个人信息管理 --  手机号修改
            if (authorityID == AuthorityID.GRXXGL_SJHXG && role.getGrxxgl() == Role.AUTHORITY_OK && role.getGrxxgl_sjhxg() == Role.AUTHORITY_OK) {
                return true;
            }

            //个人信息管理 --  个人密码修改
            if (authorityID == AuthorityID.GRXXGL_MMXG && role.getGrxxgl() == Role.AUTHORITY_OK && role.getGrxxgl_mmxg() == Role.AUTHORITY_OK) {
                return true;
            }

            //个人信息管理 --  个人签章管理
            if (authorityID == AuthorityID.GRXXGL_GRQZGL && role.getGrxxgl() == Role.AUTHORITY_OK && role.getGrxxgl_grqzgl() == Role.AUTHORITY_OK) {
                return true;
            }

            //用户管理
            if (authorityID == AuthorityID.YHGL && role.getYhgl() == Role.AUTHORITY_OK && role.getYhgl() == Role.AUTHORITY_OK) {
                return true;
            }

            //用户管理 --  新增用户
            if (authorityID == AuthorityID.YHGL_XZYH && role.getYhgl() == Role.AUTHORITY_OK && role.getYhgl_xzyh() == Role.AUTHORITY_OK) {
                return true;
            }


            //用户管理 --  用户一览
            if (authorityID == AuthorityID.YHGL_YHYL && role.getYhgl() == Role.AUTHORITY_OK && role.getYhgl_yhyl() == Role.AUTHORITY_OK) {
                return true;
            }


            //用户管理 --  用户查询
            if (authorityID == AuthorityID.YHGL_YHCX && role.getYhgl() == Role.AUTHORITY_OK && role.getYhgl_yhcx() == Role.AUTHORITY_OK) {
                return true;
            }

            //用户管理 --  权限配置
            if (authorityID == AuthorityID.YHGL_QXPZ && role.getYhgl() == Role.AUTHORITY_OK && role.getYhgl_qxpz() == Role.AUTHORITY_OK) {
                return true;
            }

            //用户管理 --  角色管理
            if (authorityID == AuthorityID.YHGL_JSGL && role.getYhgl() == Role.AUTHORITY_OK && role.getYhgl_jsgl() == Role.AUTHORITY_OK) {
                return true;
            }


            //样品管理
            if (authorityID == AuthorityID.YPGL && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl() == Role.AUTHORITY_OK) {
                return true;
            }

            //样品管理 --  送检样品登记
            if (authorityID == AuthorityID.YPGL_SJYPDJ && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl_sjypdj() == Role.AUTHORITY_OK) {
                return true;
            }


            //样品管理 --  信息补充
            if (authorityID == AuthorityID.YPGL_XXBC && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl_xxbc() == Role.AUTHORITY_OK) {
                return true;
            }


            //样品管理 --  补打二维码
            if (authorityID == AuthorityID.YPGL_BDEWM && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl_bdewm() == Role.AUTHORITY_OK) {
                return true;
            }




            //样品管理 --  样品一览
            if (authorityID == AuthorityID.YPGL_YPYL && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl_ypyl() == Role.AUTHORITY_OK) {
                return true;
            }

            //样品管理 --  样品接收单
            if (authorityID == AuthorityID.YPGL_YPJSD && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl_ypjsd() == Role.AUTHORITY_OK) {
                return true;
            }

            //样品管理 --  样品配套信息
            if (authorityID == AuthorityID.YPGL_YPPTXX && role.getYpgl() == Role.AUTHORITY_OK && role.getYpgl_ypptxx() == Role.AUTHORITY_OK) {
                return true;
            }
            //报告管理 --  全部报告
            if (authorityID == AuthorityID.BGGL_QBBG && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_qbbg() == Role.AUTHORITY_OK) {
                return true;
            }

            //报告管理 --  我的报告
            if (authorityID == AuthorityID.BGGL_WDBG && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_wdbg() == Role.AUTHORITY_OK) {
                return true;
            }
            //报告管理 --  报告查询
            if (authorityID == AuthorityID.BGGL_BGCX && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_bgcx() == Role.AUTHORITY_OK) {
                return true;
            }

            //报告管理 --  待审核报告
            if (authorityID == AuthorityID.BGGL_DSHBG && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_dshbg() == Role.AUTHORITY_OK) {
                return true;
            }

            //报告管理 --  待批准报告
            if (authorityID == AuthorityID.BGGL_DPZBG && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_dpzbg() == Role.AUTHORITY_OK) {
                return true;
            }

            //报告管理 --  待检验报告
            if (authorityID == AuthorityID.BGGL_DJYBG && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_djybg() == Role.AUTHORITY_OK) {
                return true;
            }

            //报告管理 --  待批准工作量确认单
            if (authorityID == AuthorityID.BGGL_DPZGZLQRD && role.getBggl() == Role.AUTHORITY_OK && role.getBggl_dpzgzlqrd() == Role.AUTHORITY_OK) {
                return true;
            }

            //设备维修 --  新增设备维修
            if (authorityID == AuthorityID.SBWX_XZSBWX && role.getYpgl() == Role.AUTHORITY_OK && role.getSbwx_xzsbwx() == Role.AUTHORITY_OK) {
                return true;
            }

            //设备维修 --  维修列表
            if (authorityID == AuthorityID.SBWX_WXLB && role.getYpgl() == Role.AUTHORITY_OK && role.getSbwx_wxlb() == Role.AUTHORITY_OK) {
                return true;
            }


            //设备维修 --  维修待核验
            if (authorityID == AuthorityID.SBWX_WXDHY && role.getYpgl() == Role.AUTHORITY_OK && role.getSbwx_wxdhy() == Role.AUTHORITY_OK) {
                return true;
            }



            //作业管理
            if (authorityID == AuthorityID.ZYGL && role.getYpgl() == Role.AUTHORITY_OK && role.getZygl() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  任务分配
            if (authorityID == AuthorityID.ZYGL_ZYCX && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_zycx() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  任务分配
            if (authorityID == AuthorityID.ZYGL_ZYYL && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_zyyl() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  快速分配任务
            if (authorityID == AuthorityID.ZYGL_KSFPRW && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_kszyyl() == Role.AUTHORITY_OK) {
                return true;
            }


            //作业管理 --  待分配
            if (authorityID == AuthorityID.ZYGL_DFP && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_dfp() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  待检验
            if (authorityID == AuthorityID.ZYGL_DJY && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_djy() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  待打印
            if (authorityID == AuthorityID.ZYGL_DDY && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_ddy() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  待完成
            if (authorityID == AuthorityID.ZYGL_DWC && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_dwc() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  待装箱
            if (authorityID == AuthorityID.ZYGL_DZX && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_dzx() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  待发放
            if (authorityID == AuthorityID.ZYGL_DFF && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_dff() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  工作量确认单
            if (authorityID == AuthorityID.ZYGL_GZLQRD && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_gzlqrd() == Role.AUTHORITY_OK) {
                return true;
            }

            //作业管理 --  检验任务单
            if (authorityID == AuthorityID.ZYGL_JYRWD && role.getZygl() == Role.AUTHORITY_OK && role.getZygl_jyrwd() == Role.AUTHORITY_OK) {
                return true;
            }




            //基础数据-制造厂商
            if (authorityID == AuthorityID.JCSJGL_SCCS && role.getZygl() == Role.AUTHORITY_OK && role.getJcsjgl_sccs() == Role.AUTHORITY_OK) {
                return true;
            }


            //基础数据-型号规格
            if (authorityID == AuthorityID.JCSJGL_XHGG && role.getZygl() == Role.AUTHORITY_OK && role.getJcsjgl_xhgg() == Role.AUTHORITY_OK) {
                return true;
            }

        }
        // 如果没有任何判断
        return false;

    }

    /**
     * 判断自己是否是 管理员或者超级管理员
     * @param user
     * @return
     */
    public static boolean checkIsAdmin(User user){
        String roles = user.getRole();
        String [] roleArr = roles.split(",");
        if(ArrayUtils.contains(roleArr, "1") || ArrayUtils.contains(roleArr, "2")){
            return true;
        }else{
            return false;
        }
    }

}
